/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.acionista.view;

import br.jm.acionista.entity.CepBairro;
import br.jm.acionista.entity.CepCidade;
import br.jm.acionista.sistema.eao.BairroEao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class BairroBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private final static Logger logger = Logger.getLogger(BairroBean.class.getName());
    private CepBairro selectedBairro;
    private BairroEao bairroEAO;
    private LazyDataModel<CepBairro> lazyModel;
    private CepCidade selectedCidade;
    private int nPageSize = 10;
    private boolean disable;

    public BairroBean() {
        selectedCidade = null;
        selectedBairro = new CepBairro();
        bairroEAO = BairroEao.getInstance();

        this.disable = true;

        this.lazyModel = new LazyDataModel<CepBairro>() {

            /**
             * Dummy implementation of loading a certain segment of data.
             * In a real application, this method should load data from a datasource
             */
            @Override
            public List<CepBairro> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {
                logger.log(Level.INFO, "Loading the lazy car data between {0} and {1}", new Object[]{first, (first + pageSize)});

                List<CepBairro> lazyCepBairros = new ArrayList<CepBairro>();

                try {
                    lazyCepBairros = bairroEAO.getNative("CepBairro", first, pageSize, sortField, sortOrder, filters, null);
                    this.setPageSize(pageSize);
                } catch (Exception ex) {
                    Logger.getLogger(BairroBean.class.getName()).log(Level.SEVERE, null, ex);
                }

                return lazyCepBairros;
            }
        };

        this.lazyModel.setPageSize(nPageSize);
        this.lazyModel.setRowCount(bairroEAO.getCount("CepBairro"));
    }

    public void inserir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            if (selectedCidade != null) {
                selectedBairro.setCodCidade(selectedCidade);
            }
            selectedBairro.setCodBairro(null);

            bairroEAO.create(selectedBairro);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bairro Inserido com Sucesso",
                    selectedBairro.getDscBairro());

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Inserir" + selectedBairro.getDscBairro(),
                    e.getMessage());
        } finally {
            selectedBairro = null;
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }



    }

    public void alterar(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            if (selectedCidade != null) {
                selectedBairro.setCodCidade(selectedCidade);
            }
            bairroEAO.edit(selectedBairro);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bairro Alterado com Sucesso",
                    selectedBairro.getDscBairro());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Alterar: " + selectedBairro.getDscBairro(),
                    e.getMessage());
        } finally {
            selectedCidade = null;
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            bairroEAO.destroy(selectedBairro);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bairro Excluido com Sucesso",
                    selectedBairro.getDscBairro());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: " + selectedBairro.getDscBairro(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public LazyDataModel<CepBairro> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<CepBairro> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public CepBairro getSelectedBairro() {
        if (selectedBairro == null) {
            selectedBairro = new CepBairro();
        }
        return selectedBairro;
    }

    public void setSelectedBairro(CepBairro selectedBairro) {
        this.selectedBairro = selectedBairro;
    }

    public void onRowSelectBairro(SelectEvent event) {
        this.disable = true;
    }
    
    public void onRowSelectNavigate(SelectEvent event) {
        try {
            CepCidade cidade = new CepCidade();
            cidade = (CepCidade) event.getObject();

            selectedCidade = cidade;

            this.selectedBairro.setCodCidade(selectedCidade);
        } catch (Exception ex) {
            Logger.getLogger(BairroBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public CepCidade getSelectedCidade() {
        return selectedCidade;
    }

    public void setSelectedCidade(CepCidade selectedCidade) {
        this.selectedCidade = selectedCidade;
    }

    public boolean isDisable() {
        return disable;
    }

    public void setDisable(boolean disable) {
        this.disable = disable;
    }
    
    public CepBairro novo() {
        this.disable = false;
        this.selectedBairro = new CepBairro();
        
        return this.selectedBairro;
    }
}
